#==============================================================================
# Plik Makefil do rozwiazan zadan ze strony www.opss.safo.biz
#==============================================================================
.SUFFIXES: .c .cpp .o .x .h
#==============================================================================
# MAKRA
#------------------------------------------------------------------------------
# Nazwa katalogu
DIR = stick
# Nazwy, ktorych bedziemy uzywac, tu: rdzenie nazw plikow
NAME01 = main
LIBNAME01 = stick
# Program wykonawczy: dodajemy rozszerzenie .x, ale moze byc dowolne.
EXEC01 = $(NAME01).x
# Pliki powstale po kompilacji plikow zrodlowych, tzw. object files
OBJS01 = $(NAME01).o
LIBOBJS01 = $(LIBNAME01).o
# Pliki naglowkowe
#HEADS01 = $(NAME01).h
LIBHEADS01 = $(LIBNAME01).h
#==============================================================================
# Tworze statyczna biblioteke, cz. 1
#------------------------------------------------------------------------------
LIB_NAME = stick
#LIB_SHAR = lib$(LIB_NAME).so
LIB_STAT = lib$(LIB_NAME).a
# pliki objeckowe wchodzace w sklad biblioteki
LIB_OBJS = $(LIBOBJS01)
#==============================================================================
# Opcje kompilatora i linkera
#------------------------------------------------------------------------------
CFLAGS = -Wall -O2 -I/usr/include
LFLAGS = -Wall -O2 -I/usr/include
# Biblioteki linkera zainstalowane w systemie
# (tu: biblioteka matematyczna libm i GSL)
LIBS = -lgsl -lgslcblas -lm
LPTHLIBS = -lpthread
CO = c++
LD = $(CO)
# Program-archiwizer do tworzenia bibliotek statycznych
AR = ar
# Opcje archiwizera: uaktualnianie biblioteki i wypisywanie komunikatow 
ARFLAGS = rv
##########################################################:w#####################
# Reguly zaleznosci
#------------------------------------------------------------------------------
# Tzw. regula wzorcowa - mowiaca jak pliki z rozszerzeniem .o otrzymac 
# z plikow o rozszerzeniach .cpp i .h. 
%.o: %.cpp %.h
	$(CO) $(CFLAGS) -c $<
# Jak wyzej, ale bez zaleznosci od plikow naglowkowych
%.o: %.cpp
	$(CO) $(CFLAGS) -c $<
#------------------------------------------------------------------------------
# Regula zaleznosci - uaktualnij pliki po prawej stronie dwukropka.
.PHONY: all
all: $(EXEC01)
$(EXEC01): $(OBJS01) $(LIB_STAT)
		$(LD) -o $@ $(LFLAGS) $^ $(LIBS)
#==============================================================================
# Tworze statyczna biblioteke, cz. 2
#------------------------------------------------------------------------------
# Tworzenie bibliteki statycznej dla 2. i 3. programu przy pomocy
# programu archiwizujacego. Zmienna automatyczne $? oznacza wszystkie
# prerekwizyty, ktore sa nowsze niz cel (dzieki temu tylko zmodyfikowane
# pliki bede wstawiane do biblioteki-archiwum).
$(LIB_STAT): $(LIB_OBJS)
	$(AR) $(ARFLAGS) $@ $?
#==============================================================================
# Dodatkowe reguly zaleznosci plikow objectowych od naglowkowych, ktorych
# nie uwglednia regula wzorcowa (powyzej).
###############################################################################
# Uruchamianie z uzyciem biblioteki dzielonej
#.PHONY: run1000 run1001 run1002 run1003
#------------------------------------------------------------------------------
run: $(EXEC01)
	./$(EXEC01) 2> info
###############################################################################
.PHONY: clean tar stat
clean:                                                     
	rm -f *.o  *~ *.a *.so *.x core core* a.out
# Archiwizacja i kompresja
tar: clean
	(cd ../; tar -cvzf $(DIR).tar.gz  $(DIR) )
# statystyka wypoconych 
# linii i znakow kodu :P
stat:
	wc *.h *.cpp
###############################################################################
